package com.situ.spring.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyFactory {

	/**
	  * 得到代理对象
	 * @param target 目标对象
	 * @return 代理对象
	 */
	public static Object getProxyInstance(Object target) {
		return Proxy.newProxyInstance(
				target.getClass().getClassLoader(),// 指定目标对象使用的类加载器
				target.getClass().getInterfaces(),// 目标对象实现的接口
				new InvocationHandler() {// 时间处理器
					
					// Object proxy:代表对象
					// Method method:调用方法
					// Object[] args:调用方法的参数
					// 这个invoke相当于秘书里面的qianzi这个方法
					@Override
					public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
						System.out.println("开启事物");
						System.out.println("权限验证");
						// 调用董事长签字
						Object returnVlaue = method.invoke(target, args);
						System.out.println("关闭事物");
						return returnVlaue;
					}
				});
	}
}
